package vue;
import java.awt.*;
import java.io.*;
import java.util.Vector;
import javax.swing.*;

import modele.*;
import fichier.ParserXml;
import vue.panneau3.Zone3;

public class ListeOnglets extends JTabbedPane
{	
	private JFileChooser jfc;
	private File filesave;
	
	public ListeOnglets()
	{
		// File chooser
	    jfc = new JFileChooser(System.getProperty("user.dir"));
		jfc.removeChoosableFileFilter(jfc.getFileFilter());
		jfc.addChoosableFileFilter(new Filtre());
	}
	
	public void afficherOnglet(Onglet onglet)
	{
		this.setSelectedComponent(onglet);
	}
	
	public void ajoutOnglet(String libelle)
	{
		int num = this.getComponentCount()+1;
		Onglet newOnglet = null;
		
		if(libelle.equals("Nouveau2D"))
		{
			newOnglet = new Onglet(num,false);
		}
		
		if(libelle.equals("Nouveau3D"))
		{
			newOnglet = new Onglet(num,true);			
		}
		this.addTab(libelle + " (" + num + ")",newOnglet);
		this.afficherOnglet(newOnglet);
	}
	
	public void ouvrir()
	{
		// possibilite d'ouvrir plusieurs fichiers a la fois
		jfc.setMultiSelectionEnabled(true);
		jfc.showOpenDialog(this); 
		
		File fic;
		File[] tabFic = jfc.getSelectedFiles();		
				
		for (int i=0;i<tabFic.length;i++)
		{
			if(tabFic[i].exists())
			{	
				fic = tabFic[i];
				
				// parsage du fichier a ouvrir
				ParserXml parser = new ParserXml(fic);
				
				// creation du nouvel onglet
				Onglet newOnglet = new Onglet(fic,parser.is3D());
				
				if(parser.is3D())
				{
					// recuperation des donnees
					Vector<Equation3D> listeEquations = (Vector<Equation3D>)parser.recupererListeEquations();
					FonctionAOptimiser3D fct3D = (FonctionAOptimiser3D)parser.recupererFonctionAOptimiser();
					
					// chargement des equations dans la zone 1
					newOnglet.charger3D(listeEquations,fct3D);
					
					this.addTab(fic.getName(),newOnglet);
				}
				else
				{
					// recuperation des donnees
					Vector<Equation2D> listeEquations = (Vector<Equation2D>)parser.recupererListeEquations();
					FonctionAOptimiser2D fct2D = (FonctionAOptimiser2D)parser.recupererFonctionAOptimiser();
					
					// chargement des equations dans la zone 1
					newOnglet.charger2D(listeEquations,fct2D);
					
					this.addTab(fic.getName(),newOnglet);
				}
				this.afficherOnglet(newOnglet);
			}	
		}
	}
	
	public void fermerOnglet()
	{
		this.remove(this.getSelectedIndex());
	}
	
	public void fermerTout()
	{
		this.removeAll();
	}
	
	public void enregistrer()
	{
		Onglet ongletCourant = (Onglet)this.getSelectedComponent();
		File f1 = ongletCourant.getFichier();
		
		if(f1 != null)
		{
			ongletCourant.enregistrer(f1);
		}
		else
		{
			jfc.showSaveDialog(this); 
			File f2 = jfc.getSelectedFile();
		    if (f2 != null)
			{
		    	ongletCourant.enregistrer(f2);
			}
		}
	}
	
	public void enregistrerSous()
	{
		Onglet ongletCourant = (Onglet)this.getSelectedComponent();		
		
		jfc.showSaveDialog(this); 
		File f = jfc.getSelectedFile();
	    if (f.exists())
		{
	    	ongletCourant.enregistrer(f);
		}		
	}
	
	public void imprimer()
	{
		Onglet onglet = (Onglet)this.getSelectedComponent();
		Zone3 z3 = onglet.getZone3();
		
		PrintJob demandeImpression = z3.getToolkit().getPrintJob(new JFrame(),"Impression",null);
		if (demandeImpression != null)
		{
			Graphics gImpr = demandeImpression.getGraphics();
			// imprime la zone 3
			z3.printAll(gImpr); 
			gImpr.dispose();
			// termine l'impression
			demandeImpression.end(); 
		}
	}
}
